<?php
class AAnticipoCliente {

	public function __construct() {
	}

		public function actualizarCuentas(EFacade & $facade) 
	{
		
		//echo 'se entro';
		epLoadConfig('../config.xml');

		$m = epManager::instance();
		$doc = & $facade->getDocumentRoot();
	    $workflowNDC = & $facade->getWorkflow();
		$ezpdo_= getManager();
		$session = $facade->session;
		$role=NULL;
		$montoCliente=$doc->importeTotal;
		$abono=$doc->montoUsado;
		$deuda=$montoCliente-$abono;
		
		$network=$doc->workflowRef->networkRef;
		
		$query='FROM MConfiguracionCuenta as t WHERE t.documento.oid=?';
		$configuracion=$ezpdo_->find($query,$network->epGetObjectId());
		//echo '<br>configuracion contable',$configuracion[0];
		
		$cuentas=$configuracion[0]->cuenta;
		
		
		//************CUENTAs POR COBRAR ACTUALIZACION********************************//
		foreach($cuentas as $c){
			
			if($c->posicion==1){
				
				$c->cuentaContable->aumenta($montoCliente,$doc);
				$c->cuentaContable->disminuye($abono,$doc);
			}
			
			
			$c->cuentaContable->commit();
		}
		$cliente= &$doc->cliente;
		if($cliente->cuenta){
			$cuentaCliente=$cliente->cuenta;
		}
		else{
			$cuentaCliente = $session->create('MCuentaCliente');
			$cliente->cuenta = $cuentaCliente;
		}
		
		$saldoCliente=$cuentaCliente->saldo;
		$saldoClienteNuevo=$saldoCliente+$doc->importeTotal;
		$cuentaCliente->saldo=$saldoClienteNuevo;
		$listaHistoricoCuentas = $session->create('MListaHistoricoCuentas');
		$listaHistoricoCuentas->fecha = date('U');
		
		$listaHistoricoCuentas->saldo = $saldoClienteNuevo;
		$listaHistoricoCuentas->referencia = $doc->numero;
		
		
		$listaHistoricoCuentas->debito = $doc->importeTotal;
		

		$cuentaCliente->historico[]=$listaHistoricoCuentas;
		$listaHistoricoCuentas->documento = $doc;

		//echo '<br>historico ',$listaHistoricoCuentas;
		$listaHistoricoCuentas->commit();
		$cuentaCliente->commit();
		
		$saldoNuevo=$cuentaCliente->saldo-$doc->montoUsado;
		
		$listaHistoricoCuentas = $session->create('MListaHistoricoCuentas');
		$listaHistoricoCuentas->fecha = date('U');
		
		$listaHistoricoCuentas->saldo = $saldoNuevo;
		$listaHistoricoCuentas->referencia = $doc->numero;
		
		
		$listaHistoricoCuentas->credito = $doc->montoUsado;
		

		
		$listaHistoricoCuentas->documento = $doc;
		echo '<br>historico ',$listaHistoricoCuentas;
		$cuentaCliente->historico[]=$listaHistoricoCuentas;
		$cuentaCliente->saldo=$saldoNuevo;
		//echo '<br>historico ',$listaHistoricoCuentas;
		$listaHistoricoCuentas->commit();
		$cuentaCliente->commit();
		
		
		
		//echo '<br>claro',$doc;
//		$transaccionBancaria = $ezpdo_->create('MTransaccionBancaria');
//		$transaccionBancaria->fechaTransaccion = date('U');//$doc->fechaCreacion; TOMA LA FECHA ACTUAL EN FORMATO UNIX.... carlos
		
		foreach($doc->formaPagoList as &$pagos){
			if($ctaBancaria = &$pagos->formaPago->cuentaBancaria){
				$transaccionBancaria = $ezpdo_->create('MTransaccionBancaria');
				$transaccionBancaria->fechaTransaccion = date('U');
				$ctaBancaria->saldo = $ctaBancaria->saldo - $pagos->montoPago;
				$transaccionBancaria->cuentaBancaria = $ctaBancaria; 
				$ctaBancaria->cuentaContable->aumenta($pagos->montoPago,$doc); 
				$ctaBancaria->cuentaContable->commit();
				$ctaBancaria->commit();
				$transaccionBancaria->commit();
			}
			else{
				
				$ctacaja = &$pagos->formaPago->cuentaCaja;
				$ctacaja->saldo = $ctacaja->saldo - $pagos->montoPago;
				$ctacaja->cuentaContable->aumenta($pagos->montoPago,$doc);
				$ctacaja->cuentaContable->commit();
				$ctacaja->commit();
			}
			 
		}
		
		
//		if($ctaBancaria = & $doc->facturaCliente->formaPago->cuentaBancaria){
//			$ctaBancaria->saldo = $doc->importeTotal - $ctaBancaria->saldo;//DEBERÍA SER AL CONTRARIO.. VERIFICAR... CARLOS
//			$transaccionBancaria->cuentaBancaria = $ctaBancaria;  
//		}
//		else{
//			$ctaCaja = & $doc->facturaCliente->formaPago->cuentaCaja;
//			$ctaCaja->saldo = $doc->importeTotal - $ctaCaja->saldo;//DEBERÍA SER AL CONTRARIO.. VERIFICAR... CARLOS
//		}
		
		//echo '<br>CASI listo';
		
		//CARLOS, FALTA ACTUALIZAR LA CUENTA CONTABLE.....
		
		
		//$ctaBancaria->commit();
		//$workflowSA = & $facade->getWorkflow();
		
		$doc->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios en su lista de items
		$workflowNDC->epSetDirty(TRUE);
		$facade->saveWorkflow();			
		//echo '<hr>TTT',$doc,' ---- ',$ctaBancaria;
		
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowNDC, 2); //TYPE AUTO AGENT
		$role=NULL;
		$transSA = $transSetSA->getTransByName('t2');
		$facade->fireTrans($transSA,$role,'actualizar cuentas', TRUE);
		//echo '<br>listo';
	}
	
	
	public function contabilizaPago(EFacade & $facade) 
	{
		
				
		
		 
		 $docAC = & $facade->getDocumentRoot();
		 
		 
		if($docAC->importeTotal==$docAC->montoUsado){
			$todoPago=1;
		}
		else{
			$todoPago=0;
		}
		 
		$workflowFC = & $docAC->getWorkflowRef();
		$facade->session->refresh($workflowFC);
		$transSetFC = & EFacade :: getCurrentTransSetAuto($workflowFC, /* MTrans :: $TYPE_AUTO_AGENT */	2);
		
		if($todoPago==1){
			
			$transAC = & $transSetFC->getTransByName('t5');
		}
		else {
			
			$transAC = & $transSetFC->getTransByName('t4');
		}
		
		$user=NULL;
		$facade->fireTrans($transAC, $user, 'Verificación de pago completo', FALSE);

		$workflowFC->epSetDirty(TRUE); // marcar el workflow para que sea salvado los cambios en sus worktrans
		$docAC->epSetDirty(TRUE); // marcar el documento para que sea salvado los cambios en su lista de items
		$facade->saveWorkflow();	
		 $docAC->commit();	

		 
		 
		
	}
	
	
}
?>